CCCPaste

Comments and Likes

1.	Create models comment и like;:


from django.db import models
from django.contrib.auth.models import User
from my_holiday.destination.models import Place

class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    place = models.ForeignKey(Place, on_delete=models.CASCADE)
    text = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.user.username} - {self.place.name} - {self.created_at}"


class Like(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    place = models.ForeignKey(Place, on_delete=models.CASCADE, related_name='likes')

    def __str__(self):
        return f"{self.user.username} - {self.place.name}"


2. Update place_details.html

{% extends 'base.html' %}
{% block main_content %}

Place Details

{{ place.location }}

{{ place.category }}

Name: {{ place.name }}

Description: {{ place.description }}

Rating: {{ place.rating }}

Comments

    {% for comment in place.comments.all %}
  • {{ comment.user.username }}: {{ comment.text }}
  • {% endfor %}
{% csrf_token %} {{ comment_form.as_p }}
{% endblock %} 3. Create Views # views.py from django.shortcuts import redirect, get_object_or_404 from django.contrib.auth.decorators import login_required from .forms import CommentForm, LikeForm from .models import Comment, Like # Importing the models @login_required def add_comment(request, place_id): place = get_object_or_404(Place, pk=place_id) if request.method == 'POST': form = CommentForm(request.POST) if form.is_valid(): text = form.cleaned_data['text'] Comment.objects.create(user=request.user, place=place, text=text) return redirect('details_place', pk=place_id) @login_required def add_like(request, place_id): place = get_object_or_404(Place, pk=place_id) like, created = Like.objects.get_or_create(user=request.user, place=place) if not created: like.delete() # Unlike if already liked return redirect('details_place', pk=place_id) 4. Forms # forms.py from django import forms class CommentForm(forms.Form): text = forms.CharField(widget=forms.Textarea) class LikeForm(forms.Form): pass # No fields needed, likes are handled via button click 5. Add in urls